using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.MakeIT.Laundy.Agromotor.Site.Entidades;

namespace MakeIT.MakeIT.Laundy.Agromotor.Site.Negocios
{
	public partial class AgromotorsiteDAO : DAO
	{

		public static MensagemVO getMensagem(int? idMensagem, string mensagem)
		{
			MensagemVO mensagemVO = null;
			List<MensagemVO> listMensagemVOs = getMensagems(idMensagem, mensagem);
			if (listMensagemVOs != null && listMensagemVOs.Count > 0)
			{
				mensagemVO = listMensagemVOs[0];
			}
			return mensagemVO;
		}

		public static MensagemVO getMensagem(int? idMensagem)
		{
			return getMensagem(idMensagem, null);
		}

		public static List<MensagemVO> getMensagems()
		{
			return getMensagems(null, null);
		}

		public static List<MensagemVO> getMensagems(int? idMensagem)
		{
			return getMensagems(idMensagem, null);
		}
        public static List<MensagemVO> getMensagems(int? idMensagem, string mensagem)
        {
            return getMensagems(idMensagem, mensagem, null);
        }
		public static List<MensagemVO> getMensagems(int? idMensagem, string mensagem, bool? vigente)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT msg.idMensagem as msg_idMensagem, msg.mensagem as msg_mensagem, msg.backColor as msg_backColor, msg.fonteNum as msg_fonteNum, msg.vigenciaIni as msg_vigenciaIni, msg.vigenciaFin as msg_vigenciaFin, msg.url as msg_url, msg.Cadastro as msg_Cadastro, msg.CadastradoPor as msg_CadastradoPor, msg.Edicao as msg_Edicao, msg.EditadoPor as msg_EditadoPor  ");
			query.AppendLine("FROM mensagem as msg ");
			if (idMensagem != null)
			{
				query.AppendLine(where + "msg.idMensagem=@idMensagem ");
				where = "AND ";
			}
			if (mensagem != null)
			{
				query.AppendLine(where + "msg.mensagem LIKE @mensagem ");
				where = "AND ";
			}
            if (vigente !=null)
            {
                query.AppendLine(where + "@dtHoje "+(vigente.Value?"":"NOT ")+"BETWEEN DATE(msg.vigenciaIni) AND DATE(msg.vigenciaFin) ");
                where = "AND ";
            }


			query.AppendLine("ORDER BY msg.mensagem ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			if (idMensagem!= null) cmd.Parameters.Add(getParameter(cmd, "@idMensagem", idMensagem));
			if (mensagem!= null) cmd.Parameters.Add(getParameter(cmd, "@mensagem", "%"+mensagem+"%"));
            if (vigente != null) cmd.Parameters.Add(getParameter(cmd, "@dtHoje", DateTime.Today));

			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<MensagemVO> listMensagem = new List<MensagemVO>();

				while (reader.Read())
				{
					MensagemVO mensagemVO = MensagemVO.CreateVO();
					mensagemVO.idMensagem = reader.GetInt32(reader.GetOrdinal("msg_idMensagem"));
					mensagemVO.mensagem = reader.GetString(reader.GetOrdinal("msg_mensagem"));
					mensagemVO.backColor = reader.GetString(reader.GetOrdinal("msg_backColor"));
					mensagemVO.fonteNum = reader.GetInt32(reader.GetOrdinal("msg_fonteNum"));
					mensagemVO.vigenciaIni = reader.GetDateTime(reader.GetOrdinal("msg_vigenciaIni"));
					mensagemVO.vigenciaFin = reader.GetDateTime(reader.GetOrdinal("msg_vigenciaFin"));
                    if (!reader.IsDBNull(reader.GetOrdinal("msg_url")))
                        mensagemVO.URL = reader.GetString(reader.GetOrdinal("msg_url"));
                    mensagemVO.cadastro = reader.GetDateTime(reader.GetOrdinal("msg_Cadastro"));
					mensagemVO.cadastradoPor = reader.GetString(reader.GetOrdinal("msg_CadastradoPor"));
					mensagemVO.edicao = reader.GetDateTime(reader.GetOrdinal("msg_Edicao"));
					mensagemVO.editadoPor = reader.GetString(reader.GetOrdinal("msg_EditadoPor"));


					listMensagem.Add(mensagemVO);
				}
				reader.Close();
				return listMensagem;
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (reader != null && !reader.IsClosed)
                    reader.Close();
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }
        }

		public static void setMensagem(MensagemVO mensagemVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE mensagem ");
			query.AppendLine("SET mensagem=@mensagem, backColor=@backColor, fonteNum=@fonteNum, vigenciaIni=@vigenciaIni, vigenciaFin=@vigenciaFin,  url=@url, Cadastro=@Cadastro, CadastradoPor=@CadastradoPor, Edicao=@Edicao, EditadoPor=@EditadoPor ");
			query.AppendLine("WHERE idMensagem=@idMensagem ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idMensagem", mensagemVO.idMensagem));
			cmd.Parameters.Add(getParameter(cmd, "@mensagem", mensagemVO.mensagem));
			cmd.Parameters.Add(getParameter(cmd, "@backColor", mensagemVO.backColor));
			cmd.Parameters.Add(getParameter(cmd, "@fonteNum", mensagemVO.fonteNum));
			cmd.Parameters.Add(getParameter(cmd, "@vigenciaIni", mensagemVO.vigenciaIni));
			cmd.Parameters.Add(getParameter(cmd, "@vigenciaFin", mensagemVO.vigenciaFin));
            cmd.Parameters.Add(getParameter(cmd, "@url", mensagemVO.URL));
            cmd.Parameters.Add(getParameter(cmd, "@Cadastro", mensagemVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@CadastradoPor", mensagemVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@Edicao", mensagemVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@EditadoPor", mensagemVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}

		public static long newMensagem(MensagemVO mensagemVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO mensagem ");
			query.AppendLine("  ( mensagem, backColor, fonteNum, vigenciaIni, vigenciaFin, url, Cadastro, CadastradoPor, Edicao, EditadoPor ) ");
			query.AppendLine("VALUES ( @mensagem, @backColor, @fonteNum, @vigenciaIni, @vigenciaFin, @url, @Cadastro, @CadastradoPor, @Edicao, @EditadoPor ) ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@mensagem", mensagemVO.mensagem));
			cmd.Parameters.Add(getParameter(cmd, "@backColor", mensagemVO.backColor));
			cmd.Parameters.Add(getParameter(cmd, "@fonteNum", mensagemVO.fonteNum));
			cmd.Parameters.Add(getParameter(cmd, "@vigenciaIni", mensagemVO.vigenciaIni));
			cmd.Parameters.Add(getParameter(cmd, "@vigenciaFin", mensagemVO.vigenciaFin));
            cmd.Parameters.Add(getParameter(cmd, "@url", mensagemVO.URL));
            cmd.Parameters.Add(getParameter(cmd, "@Cadastro", mensagemVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@CadastradoPor", mensagemVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@Edicao", mensagemVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@EditadoPor", mensagemVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('mensagem') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}

		public static void delMensagem(MensagemVO mensagemVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM mensagem ");
			query.AppendLine("WHERE idMensagem=@idMensagem ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idMensagem", mensagemVO.idMensagem));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}
	}
}
